定义三轮车的三个轮子分别是 A、B、C, 速度分别是a、b、c;
定义半径 Radius 是中点到轮子的距离;
定义 a,b 为前轮,c 为后轮。
三个速度平移到一点,三个速度大小分别是 a,b,c,分解到坐标系上的坐标应该是:
$$
\overrightarrow{V_a}=(\frac{\sqrt{3}}{2}a,-\frac{1}{2}a)\\
\overrightarrow{V_b}=(-\frac{\sqrt{3}}{2}b,-\frac{1}{2}b)\\
\overrightarrow{V_c}=(0,c)
$$
以 y 方向为正方向,得到的和向量是:
$$
\overrightarrow{S}=(\frac{\sqrt{3}}{2}a-\frac{\sqrt{3}}{2}b,c-\frac{1}{2}a-\frac{1}{2}b)
$$
以车的旋转中心为车的中心,角速度的计算公式:
$$
\omega=\frac{a+b+c}{3r}
$$
总之,速度大小、速度方向、旋转角速度三个量决定了车体的运动和姿态。
控制程序
思路:假设需要的速度是 $v,\omega$,以及需要偏向的角度是 $\theta$
$$
\begin{bmatrix}Vcos\theta\\ Vsin\theta\\ \omega\end{bmatrix}=\begin{bmatrix}V_x \\ V_y \\ \omega\end{bmatrix}=
\begin{bmatrix}
\frac{\sqrt{3}}{2} & -\frac{\sqrt{3}}{2} & 0\\
-\frac{1}{2} & -\frac{1}{2} & 1\\
\frac{1}{3r} & \frac{1}{3r} & \frac{1}{3r}
\end{bmatrix}
\begin{bmatrix}a\\ b \\ c \end{bmatrix}
$$
然后根据这个反解出 a,b,c 分给三个轮子,先对矩阵求逆:
$$
\begin{bmatrix}
\frac{\sqrt{3}}{2} & -\frac{\sqrt{3}}{2} & 0\\
-\frac{1}{2} & -\frac{1}{2} & 1\\
\frac{1}{3r} & \frac{1}{3r} & \frac{1}{3r}
\end{bmatrix}^{-1}=
\begin{bmatrix}
\frac{\sqrt{3}}{3} & -\frac{1}{3} & r \\
-\frac{\sqrt{3}}{3} & -\frac{1}{3} & r \\
0 & \frac{2}{3} & r
\end{bmatrix}
$$
带入左式:
$$
\begin{bmatrix}a\\ b \\ c \end{bmatrix}=
\begin{bmatrix}
\frac{\sqrt{3}}{3} & -\frac{1}{3} & r \\
-\frac{\sqrt{3}}{3} & -\frac{1}{3} & r \\
0 & \frac{2}{3} & r
\end{bmatrix}
\begin{bmatrix}Vcos\theta\\ Vsin\theta\\ \omega\end{bmatrix}
$$
python 实现:
1 | # demo |
电机控制程序
1 | import RPi.GPIO as GPIO |